const https = require('https');
const sqlconnnect = require('./sqlconnnect');
const { formatTime } = require('./util')
/////雪花算法生成
const snowflake = require('./snowflake')

const multer = require('multer')
// const upload = multer({ dest: 'uploads/'})
const storage = multer.diskStorage({
    destination: './uploads',
    filename: function (req, file, cb) {
        ///获取图片类型
        // console.log(file)
        let fileType = file.originalname.split('.')
        fileType = fileType[fileType.length - 1]
        cb(null, snowflake() + '.' + fileType)
    }
})
const upload = multer({ storage: storage})

module.exports = function(app){
    /////登录拦截中间键
    function loginRouter(req, res, next){
        if(req.method.toUpperCase() == 'OPTIONS'){
            next()
            return;
        }
        let token = req.headers.token
        if(token){
            sqlconnnect(`select * from session where id = ${token} and state = 1`).then(ret => {
                ////注册成功返回新用户
                
                if(ret.length){
                    let session = ret[0]
                    if(new Date().getTime() - session.createTime <2*60*60*1000){
                        req.session = {
                            userId:session.userId,
                            userName:session.userName
                        }
                        next()    
                    }else{
                    res.status(406).send({errorMsg:'登录超时'})
                    }
                   
                }else{
                    res.status(406).send({errorMsg:'当前用户未登录'})
                }
            })
        }else{
            res.status(405).send({errorMsg:'缺少token，请先进行登录'})
        }
    }

    ////拦截中间键，所有接口只有登录才能获取数据
    app.use('/admin',loginRouter)
    /////日期格式化
    ////文件上传
    app.post('/upload',upload.single('file'),(req, res) => {
        // console.log(req.file);
        res.send(req.file)
    })

    ///管理后台登录
    app.post('/login',(req, res) => {///创建服务=
        let userName = req.body.userName
        let passWord = req.body.passWord
        if(userName && passWord){
            sqlconnnect(`select * from user where userName = '${userName}'`).then(users => {
                if(users.length){
                    let user = users[0]
                    if(passWord == user.passWord){
                        let token = snowflake()/////通过雪花算法得到token
                        sqlconnnect(`INSERT INTO session(id, userId, userName, inTime, createTime, platform) VALUES(${token}, '${user._id}', '${user.nickName}', '${formatTime(new Date())}', ${new Date().getTime()}, 'admin')`).then(ret => {
                            res.send({
                                nickName: user.nickName,
                                token,
                                avatarUrl: user.photo,
                                _id: user._id
                            })
                        })
                    }else{
                        res.send({errorMsg:'密码错误'})
                    }    
                }else{
                    res.send({errorMsg:'用户名不存在'})
                }

            })
        }else{
            res.send({errorMsg:'用户名和密码不能为空'})
        }
    })
/////退出登录
    app.get('/admin/logout',(req,res) => {
        sqlconnnect(`update session set outTime='${formatTime(new Date())}' , state = 0 where id = ${req.headers.token}` ).then(ret=>{
            res.send({erroeMsg:'退出登录成功'})
        })
    })
    app.post('/admin/changePassWord', (req, res) =>{
        let userId = req.session.userId
        let passWord = req.body.passWord
        let newPassWord = req.body.newPassWord
        if(passWord && newPassWord){
            //通过userID查询用户
            sqlconnnect(`select passWord from user where _id = ${userId}`).then(users => {
                let user = users[0]
                //比对原密码
                if(user.passWord == passWord){
                        sqlconnnect(`update user set passWord = '${newPassWord}' where _id = ${userId}`).then(ret =>{
                        res.send({msg:'修改密码成功'})
                    })
                }else{
                    res.send({msg:'原密码错误'})
                }
            })            
        }else{
            res.send({erorMsg:'原密码和新密码不能为空'})
        }

    })
    //获取首页轮播图列表
    //pageSize
    //pageNum
    app.get('/admin/index',(req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum -1) * pageSize
        let title = req.query.title
        let type = req.query.type
        let whereSql =  'from index_region where state = 1'
        if(type) whereSql += ` and type = '${type}'`
        ///按标题关键字搜索
        if(title) whereSql += ` and title like "%${title}%"`
        sqlconnnect(`select count(*) as total ${whereSql};select * ${whereSql} limit ${pageSize} offset ${offset}`).then(ret =>{
            // console.log(ret)
            res.send({
                total:ret[0][0].total,
                rows:ret[1]
            })
        })
    })
        ////新增首页项目
        //img图片必填
        //url必填
        //title 标题 轮播图不填， 其他必填
        //status是否启用 非必填 1，启用 0，停用
        //type类型 非必填 banner （默认） 轮播图 category ，分类，recommend ，为你推荐
        app.post('/admin/index',(req,res) => {
            let img = req.body.img,url = req.body.url,status = req.body.status
            let type = req.body.type || 'banner',title = req.body.title
            if(type != 'banner' && !title){
                res.send({errorMsg:'标题不能为空'})
                return
            }
            if(status !=1) status =0//默认启用
            if(img){
                let createTime = new Date().getTime()
                sqlconnnect(`INSERT INTO index_region(title,img, url, status, state, createTime, unitId, type) 
                VALUES('${title}','${img}', '${url}','${status}',1,${createTime},'juzao','${type}' )`).then(ret => {
                    res.send(ret.insertId ? {_id:ret.insertId} : {errorMsg:'新增数据失败'})
                    
                })
            }else{
                res.send({errorMsg:'传入参数错误'})
            }
            
        })

  /////修改首页
    ////传入addressID 主码_id必填

    app.put('/admin/index',(req,res)=>{
        if(req.body.indexId){
            let updateTime = new Date().getTime()
            let updateKey = ['img', 'url', 'title', 'status']
            let updateValues = [`updateTime=${updateTime}`]
            for(let i = 0; i < updateKey.length; i++){
                let key = updateKey[i], value = req.body[key]
                if(value !== undefined) updateValues.push(`${key} = '${value}'`)//判断哪些参数需要修改
            }
            sqlconnnect(`UPDATE index_region set ${updateValues.join(',')} where _id = ${req.body.indexId}`).then(ret => {
                res.send(ret)
                
            })
        }else{
            res.send({errorMsg:'传入参数错误'})
        }
    })
    /////删除地址 逻辑删除
    app.delete('/admin/index',(req, res) => {
        let indexId = req.query.indexId
        if(indexId){
            sqlconnnect(`UPDATE index_region set state = 0 where _id = ${indexId}`).then(ret => {
                res.send(ret)
            })
        }else{
            res.send({errorMsg: '传入参数错误'})
        }
    })





///////品牌获取
    app.get('/admin/index',(req, res) => {
        let pageSize = req.query.pageSize || 10
        let pageNum = req.query.pageNum || 1
        let offset = (pageNum -1) * pageSize
        let title = req.query.title
        let type = req.query.type
        let whereSql =  'from brand where state = 1'
        // if(type) whereSql += ` and type = '${type}'`
        ///按标题关键字搜索
        // if(title) whereSql += ` and title like "%${title}%"`
        sqlconnnect(`select count(*) as total ${whereSql};select * ${whereSql} limit ${pageSize} offset ${offset}`).then(ret =>{
            // console.log(ret)
            res.send({
                total:ret[0][0].total,
                rows:ret[1]
            })
        })
    })
}